//package com.example.springboot.mapping;
//
//import cn.hutool.core.collection.CollUtil;
//import cn.hutool.core.util.StrUtil;
//import com.example.springboot.config.ApiVersionConfig;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.context.properties.EnableConfigurationProperties;
//import org.springframework.web.servlet.mvc.condition.AbstractRequestCondition;
//
//import javax.servlet.http.HttpServletRequest;
//import java.util.*;
//import java.util.stream.Stream;
//
///**
// * @author by Mr. Li 2021/1/30 15:56
// */
//@Slf4j
//public class ApiVersionCondition extends AbstractRequestCondition<ApiVersionCondition> {
//
//    private Set<String> versions;
//
//    public ApiVersionCondition(String... versions) {
//        this(Arrays.asList(versions));
//    }
//
//    private <T> ApiVersionCondition(List<T> versions) {
//        this.versions = new HashSet(versions);
//
//    }
//
//    @Override
//    protected Collection<?> getContent() {
//        return this.versions;
//    }
//
//    @Override
//    protected String getToStringInfix() {
//        return "||";
//    }
//
//    /**
//     * 参数合并
//     *
//     * @param other
//     * @return
//     */
//    @Override
//    public ApiVersionCondition combine(ApiVersionCondition other) {
//        return other.versions == null ? this : other;
//    }
//
//    /**
//     * mapping对象属性与请求进行匹配
//     *
//     * @param request 请求
//     * @return ApiVersionCondition
//     */
//    @Override
//    public ApiVersionCondition getMatchingCondition(HttpServletRequest request) {
//        // 查看版本条件是否和请求匹配
//        final String header = request.getHeader("X-api-version");
//
//        if (StrUtil.isNotBlank(header)) {
//            if (header.equals("v3")) return this;
//        }
//        // 获取请求中的数据
//        final String requestURI = request.getRequestURI();
//        // 判断versions 不等于空
//        if (CollUtil.isNotEmpty(versions)) {
//            if (StrUtil.isNotBlank(requestURI)) {
//                final String[] split = requestURI.split("/");
//                for (String version : versions) {
//                    if (CollUtil.contains(Arrays.asList(split), version)) {
//                        return this;
//                    }
//                }
//
//            }
//        }
//        return null;
//    }
//
//    @Override
//    public int compareTo(ApiVersionCondition other, HttpServletRequest request) {
//        final String v1 = this.versions.stream().findFirst().orElse("v1");
//        final String v11 = other.versions.stream().findFirst().orElse("v1");
//
//        return v1.compareTo(v11);
//    }
//}
